package com.example.ivideo_2211a.activity

import android.os.Bundle
import android.view.View

import androidx.appcompat.app.AppCompatActivity
import androidx.viewpager2.widget.ViewPager2
import android.widget.LinearLayout
import android.widget.ImageView
import com.alibaba.android.arouter.launcher.ARouter
import com.blankj.utilcode.util.SPUtils
import com.example.ivideo_2211a.R
import com.example.ivideo_2211a.adapter.GuideAdapter

import com.google.android.material.button.MaterialButton

class GuideActivity : AppCompatActivity() {
    
    private lateinit var viewPager: ViewPager2
    private lateinit var indicatorLayout: LinearLayout
    private lateinit var btnExperience: MaterialButton
    private lateinit var guideAdapter: GuideAdapter
    private val indicators = mutableListOf<ImageView>()
    
    private val guideImages = listOf(
        R.drawable.img_1,
        R.drawable.img_2,
        R.drawable.img_3
    )
    
    private val guideTitles = listOf(
        "欢迎使用IVideo",
        "智能视频处理",
        "开始您的创作之旅"
    )
    
    private val guideDescriptions = listOf(
        "专业的视频编辑工具，让您的创意无限发挥",
        "AI智能辅助，轻松制作精美视频内容",
        "准备好了吗？让我们一起开始精彩的视频创作体验"
    )
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 判断是否首次进入
        val isFirstRun = SPUtils.getInstance().getBoolean("isFirstRun", true)
        if (!isFirstRun) {
            // 非首次进入，直接跳转主界面
            navigateToSplash()
            finish()
            return
        }
        // 首次进入，展示引导页
        setContentView(R.layout.activity_guide)
        // 标记为已进入过
        SPUtils.getInstance().put("isFirstRun", false)
        initViews()
        setupViewPager()
        setupIndicators()
        setupListeners()
    }
    /**
     * 初始化界面控件
     */
    private fun initViews() {
        viewPager = findViewById(R.id.viewPager)
        indicatorLayout = findViewById(R.id.indicatorLayout)
        btnExperience = findViewById(R.id.btnExperience)
    }

    /**
     * 设置ViewPager
     */
    private fun setupViewPager() {
        guideAdapter = GuideAdapter(guideImages, guideTitles, guideDescriptions)
        viewPager.adapter = guideAdapter

        // 启用用户滑动
        viewPager.isUserInputEnabled = true

        // 设置页面变化监听
        viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
            override fun onPageSelected(position: Int) {
                super.onPageSelected(position)
                updateUI(position)
            }

            override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels)

                // 在最后一页时，如果用户尝试向前滑动，阻止滑动
                if (position == guideImages.size - 1 && positionOffset > 0) {
                    viewPager.setCurrentItem(position, false)
                }
            }
        })
    }

    /**
     * 设置指示器
     */
    private fun setupIndicators() {
        indicators.clear()
        indicatorLayout.removeAllViews()

        // 遍历引导页图片列表，为每张图片创建一个指示器
        for (i in guideImages.indices) {
            // 创建ImageView作为指示器
            val indicator = ImageView(this)
            // 设置指示器的宽高为系统图标大小的四分之一
            val layoutParams = LinearLayout.LayoutParams(
                resources.getDimensionPixelSize(android.R.dimen.app_icon_size) / 3,
                resources.getDimensionPixelSize(android.R.dimen.app_icon_size) / 3
            )
            // 设置指示器左右间距
            layoutParams.setMargins(8, 0, 8, 0)
            indicator.layoutParams = layoutParams

            // 设置指示器样式，第一个为选中状态，其余为未选中状态
            indicator.setImageResource(
                if (i == 0){
                    android.R.drawable.radiobutton_on_background
                } else{
                    android.R.drawable.radiobutton_off_background
                }
            )
            // 将指示器添加到列表和布局中
            indicators.add(indicator)
            indicatorLayout.addView(indicator)
        }
    }

    /**
     * 设置监听器
     */
    private fun setupListeners() {
        btnExperience.setOnClickListener {
                navigateToSplash()
        }
    }

    /**
     * 更新界面UI
     * @param position 当前页面位置
     */
    private fun updateUI(position: Int) {
        // 更新指示器
        updateIndicators(position)

        // 只在最后一页显示"立即体验"按钮
        if (position == guideImages.size - 1) {
            btnExperience.visibility = View.VISIBLE
            btnExperience.animate()
                .alpha(1f)
                .scaleX(1f)
                .scaleY(1f)
                .setDuration(300)
                .start()
        } else {
            btnExperience.animate()
                .alpha(0f)
                .scaleX(0.8f)
                .scaleY(0.8f)
                .setDuration(200)
                .withEndAction {
                    btnExperience.visibility = View.GONE
                }
                .start()
        }

        // 控制ViewPager的滑动行为
        if (position == guideImages.size - 1) {
            // 最后一页：可以向后滑动，不能向前滑动
            viewPager.isUserInputEnabled = true
        } else {
            // 其他页面：正常滑动
            viewPager.isUserInputEnabled = true
        }
    }

    /**
     * 更新指示器状态
     * @param position 当前页面位置
     */
    private fun updateIndicators(position: Int) {
        for (i in indicators.indices) {
            indicators[i].setImageResource(
                if (i == position){
                    android.R.drawable.radiobutton_on_background
                }
                else{
                    android.R.drawable.radiobutton_off_background
                }
            )
        }
    }

    /**
     * 跳转到启动页
     */
    private fun navigateToSplash() {
        ARouter.getInstance().build("/app/SplashActivity").navigation()
        // 添加页面切换动画
        overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out)
    }

    /**
     * 处理返回键点击事件
     */
    override fun onBackPressed() {
        val currentItem = viewPager.currentItem
        if (currentItem > 0) {
            // 如果不是第一页，返回到上一页
            viewPager.setCurrentItem(currentItem - 1, true)
        } else {
            // 如果是第一页，退出应用
            super.onBackPressed()
        }
    }

}